/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import dao.Conexao;
import dao.EnderecoDAO;
import dao.PortalDAOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Endereco;

/**
 *
 * @author alienware
 */
public class EnderecoDAOImpl implements EnderecoDAO{
    
    private Connection conn;

    public EnderecoDAOImpl() throws PortalDAOException {
        try {
            this.conn = Conexao.getConnection();
        } catch (Exception e) {
            throw new PortalDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    @Override
    public void atualizar(Endereco endereco) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (endereco == null) {
            throw new PortalDAOException("Nenhum endereço foi informado.");
        }
        try {
            String sql = "UPDATE endereco SET setor=?, rua=?"
                    + "WHERE cep=? AND codcidade=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, endereco.getSetor());
            ps.setString(2, endereco.getRua());
            ps.setString(3, endereco.getCep());
            ps.setString(4, endereco.getCodcidade());
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao atualizar endereço. \n" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public void excluir(Endereco endereco) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (endereco == null) {
            throw new PortalDAOException("Nenhum endereço informado.");
        }
        try {
            String sql = "DELETE FROM endereco WHERE cep = ?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, endereco.getCep());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao excluir endereço " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public void salvar(Endereco endereco) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (endereco == null) {
            throw new PortalDAOException("Nenhum endereço foi informado.");
        }
        try {
            String sql = "INSERT INTO endereco values (?, ?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, endereco.getCep());
            ps.setString(2, endereco.getSetor());
            ps.setString(3, endereco.getRua());
            ps.setString(4, endereco.getCodcidade());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao inserir endereço " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public List todosEnderecos() throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM endereco";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Endereco> listaEnderecos = new ArrayList<Endereco>();
            while (rs.next()) {
                String cep = rs.getString("cep");
                String setor = rs.getString("setor");
                String rua = rs.getString("rua");
                String codcidade = rs.getString("codcidade");
                listaEnderecos.add(new Endereco(cep, setor, rua, codcidade));
            }
            return listaEnderecos;
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao listar enderecos. \n " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
    @Override
    public Endereco procurarEndereco(String cep) throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM endereco WHERE cep=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, cep);
            rs = ps.executeQuery();
            Endereco endereco;
            if( !rs.next()) {
                endereco = new Endereco();
            } else {
                String cep1 = rs.getString("cep");
                String setor = rs.getString("setor");
                String rua = rs.getString("rua");
                String codcidade = rs.getString("codcidade");
                endereco = new Endereco(cep1, setor, rua, codcidade);
            }
            return endereco;
        } catch (SQLException e){
            throw new PortalDAOException("Erro ao procurar endereço " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    

    @Override
    public Endereco procurarEndereco(String setor, String rua) throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM endereco WHERE cep=? AND rua=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, setor);
            ps.setString(1, rua);
            rs = ps.executeQuery();
            Endereco endereco;
            if( !rs.next()) {
                endereco = new Endereco();
            } else {
                String cep = rs.getString("cep");
                String setor1 = rs.getString("setor");
                String rua1 = rs.getString("rua");
                String codcidade = rs.getString("codcidade");
                endereco = new Endereco(cep, setor1, rua1, codcidade);
            }
            return endereco;
        } catch (SQLException e){
            throw new PortalDAOException("Erro ao procurar endereço " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
}
